#include <stdio.h>  
  
int main() {  
    int n = 5;  
    int matrix[n][n];  
  
    // 初始化矩阵  
    for (int i = 0; i < n; i++) {  
        for (int j = 0; j < n; j++) {  
            matrix[i][j] = 0;  
        }  
    }  
  
    // 定义左、上、右、下四个方向的偏移量  
    int left_offset = -1, right_offset = 1;  
    int upper_offset = -1, lower_offset = 1;  
  
    // 定义变量记录当前方向和位置  
    int direction = 0; // 0表示向右，1表示向下，2表示向左，3表示向上  
    int position = 0; // 当前应该填入的值  
  
    // 填充螺旋矩阵  
    while (position <= n * n) {  
        // 根据当前方向移动  
        switch (direction) {  
            case 0: // 向右  
                for (int i = left_offset + position; i < n && position < n * n; i++) {  
                    matrix[position / n][i] = position % n + 1;  
                    position++;  
                }  
                if (position >= n * n) break; // 如果已经填满，跳出循环  
                direction = 1; // 改为向下方向  
                break;  
            case 1: // 向下  
                for (int i = upper_offset + position / n; i < n && position < n * n; i++) {  
                    matrix[i][position / n] = position % n + 1;  
                    position++;  
                }  
                if (position >= n * n) break; // 如果已经填满，跳出循环  
                direction = 2; // 改为向左方向  
                break;  
            case 2: // 向左  
                for (int i = right_offset + position / n - 1; i >= left_offset && position < n * n; i--) {  
                    matrix[position / n][i] = position % n + 1;  
                    position++;  
                }  
                if (position >= n * n) break; // 如果已经填满，跳出循环  
                direction = 3; // 改为向上方向  
                break;  
            case 3: // 向上  
                for (int i = lower_offset + position % n - 1; i >= upper_offset && position < n * n; i--) {  
                    matrix[i][position / n] = position % n + 1;  
                    position++;  
                }  
                if (position >= n * n) break; // 如果已经填满，跳出循环  
                direction = 0; // 改为向右方向，继续填充下一行  
                break;  
        }  
        // 根据当前位置和偏移量更新左、上、右、下四个方向的偏移量  
        left_offset++; lower_offset++; right_offset--; upper_offset--;  
    }  
  
    // 输出结果矩阵  
    for (int i = 0; i < n; i++) {  
        for (int j = 0; j < n; j++) {  
            printf("%d ", matrix[i][j]); // 这里假设输出整数，如果输出字符需要将%d改为%c并修改字符类型和赋值方式  
        }  
        printf("\n"); // 每行输出完毕后换行  
    }  
  
    return 0;